/*
 * Copyright 2024 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: google/bigtable/v2/bigtable.proto

// Protobuf Java Version: 3.25.5
package com.google.bigtable.v2;

public interface RateLimitInfoOrBuilder
    extends
    // @@protoc_insertion_point(interface_extends:google.bigtable.v2.RateLimitInfo)
    com.google.protobuf.MessageOrBuilder {

  /**
   *
   *
   * <pre>
   * Time that clients should wait before adjusting the target rate again.
   * If clients adjust rate too frequently, the impact of the previous
   * adjustment may not have been taken into account and may
   * over-throttle or under-throttle. If clients adjust rate too slowly, they
   * will not be responsive to load changes on server side, and may
   * over-throttle or under-throttle.
   * </pre>
   *
   * <code>.google.protobuf.Duration period = 1;</code>
   *
   * @return Whether the period field is set.
   */
  boolean hasPeriod();
  /**
   *
   *
   * <pre>
   * Time that clients should wait before adjusting the target rate again.
   * If clients adjust rate too frequently, the impact of the previous
   * adjustment may not have been taken into account and may
   * over-throttle or under-throttle. If clients adjust rate too slowly, they
   * will not be responsive to load changes on server side, and may
   * over-throttle or under-throttle.
   * </pre>
   *
   * <code>.google.protobuf.Duration period = 1;</code>
   *
   * @return The period.
   */
  com.google.protobuf.Duration getPeriod();
  /**
   *
   *
   * <pre>
   * Time that clients should wait before adjusting the target rate again.
   * If clients adjust rate too frequently, the impact of the previous
   * adjustment may not have been taken into account and may
   * over-throttle or under-throttle. If clients adjust rate too slowly, they
   * will not be responsive to load changes on server side, and may
   * over-throttle or under-throttle.
   * </pre>
   *
   * <code>.google.protobuf.Duration period = 1;</code>
   */
  com.google.protobuf.DurationOrBuilder getPeriodOrBuilder();

  /**
   *
   *
   * <pre>
   * If it has been at least one `period` since the last load adjustment, the
   * client should multiply the current load by this value to get the new target
   * load. For example, if the current load is 100 and `factor` is 0.8, the new
   * target load should be 80. After adjusting, the client should ignore
   * `factor` until another `period` has passed.
   *
   * The client can measure its load using any unit that's comparable over time
   * For example, QPS can be used as long as each request involves a similar
   * amount of work.
   * </pre>
   *
   * <code>double factor = 2;</code>
   *
   * @return The factor.
   */
  double getFactor();
}
